from models import Role,Menu,User
from flask import Request
from util import JwtUtil
# from config.FlaskConfig import database
__loginPathStart = ('/public')

def authHanleByRid(rids,hid):
    if(1 in rids):
        return True
    rids = Role.getCanUseRoleIdsInId(rids)
    return Role.hasRolesHandle(rids,hid)

def pathNotNeedAuth(req:Request):
    # 静态资源放行
    if(req.path.startswith(__loginPathStart)):
        return True
    # 查询系统是否拥有该接口
    handle:dict = Menu.getHandleByPathAndMethod(req.path,req.method)
    # 无该接口放行
    if(handle == None):
        return True
    # 登陆验证
    token = req.headers.get("Authorization")
    # 获取用户信息
    info:dict = JwtUtil.authToken(token)
    # 如果是公共接口 放行
    if handle['key'] == 'public':
        # 若是用户既没有登录  接口也不是开放  不给通行
        if info and info.get('rid')==1:
            return True    
        if handle.get('status')!='1':
            return False
        return True
    # 身份信息过期
    if(info == False):
        return None
    # 身份有效保存信息
    req.environ.setdefault("UID",info.get('id'))
    req.environ.setdefault("RID",info.get('rid'))
    req.environ.setdefault("USERNAME",info.get('username'))
    # 如果是用户接口 验证登陆完成直接放行
    if handle['key'] == 'user':
        return True
    # 系统接口需要验证角色权限
    if handle['key'] == 'sys':
        return authHanleByRid([info.get('rid')],handle.get('hId'))
        
